package page

/*分页处理*/
type Page struct {
	Total       int64 `json:"total"`
	CurrentPage int64 `json:"-"`
	PageNo      int64 `json:"pageNo"`
	PageSize    int64 `json:"pageSize"`
	Pages       int64 `json:"pages"`
	HasPrevious bool  `json:"hasPrevious"`
	HasNext     bool  `json:"hasNext"`
	Records     any   `json:"records"`
}

/*分页方法*/
func (px *Page) Page(pageNo int64, pageSize int64, total int64) (pp *Page) {

	// 如果用户传递是小于1的数字，直接给1
	if pageNo <= 1 {
		pageNo = 1
	}
	// 如果每页显示的记录小于0，也给1
	if pageSize <= 0 {
		pageSize = 1
	}
	// 计算总页数，如果能整出说明是刚好，不能就+1，补齐 110
	pages := total / pageSize
	if total%pageSize != 0 {
		pages = pages + 1
	}
	// 创建分页对象
	p := new(Page)
	//
	p.PageNo = pageNo
	// 计算分页的起始
	p.CurrentPage = pageSize * (pageNo - 1)
	// 返回每页显示多少
	p.PageSize = pageSize
	// 返回总页数
	p.Total = total
	// 是否有下一页
	p.HasNext = pageNo < pages
	// 是否有上一些
	p.HasPrevious = pageNo > 1
	// 返回总页数
	p.Pages = pages
	// 返回分页对象
	return p
}
